package JDBC;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import DAO.ClienteDAO;
import modelo.Cliente;

public class JdbcClienteDAO implements ClienteDAO {

	private Connection connection;

	public JdbcClienteDAO(Connection connection) {
		this.connection = connection;
	}

	public void inserirCliente(Cliente cliente) {

		try {
			String sql = "insert into clientes "
					+ "(nome,cpf,telefoneContato,celular,endereco,bairro,estado,cidade,cep,email,estadoCivil)"
					+ "VALUES(?,?,?,?,?,?,?,?,?,?,?);";

			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setString(1, cliente.getNome());
			stmt.setString(2, cliente.getCpf());
			stmt.setString(3, cliente.getTelefoneContato());
			stmt.setString(4, cliente.getCelular());
			stmt.setString(5, cliente.getEndereco());
			stmt.setString(6, cliente.getBairro());
			stmt.setString(7, cliente.getEstado());
			stmt.setString(8, cliente.getCidade());
			stmt.setString(9, cliente.getCep());
			stmt.setString(10, cliente.getEmail());
			stmt.setString(11, cliente.getEstadoCivil());

			stmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();

		}

	}

	public List<Cliente> consultarClienteNome(String texto) {

		List<Cliente> listaClientes = new ArrayList<Cliente>();

		try {

			
			PreparedStatement stmt = this.connection.prepareStatement("select * from clientes where nome like ?");
			stmt.setString(1,texto + "%");
			ResultSet rs = stmt.executeQuery();
			while (rs.next()) {
				Cliente cliente = new Cliente();
				cliente.setCodigoCliente(rs.getInt("codigoCliente"));
				cliente.setNome(rs.getString("nome"));
				cliente.setCpf(rs.getString("cpf"));
				cliente.setTelefoneContato(rs.getString("telefoneContato"));
				cliente.setCelular(rs.getString("celular"));
				cliente.setEndereco(rs.getString("endereco"));
				cliente.setBairro(rs.getString("bairro"));
				cliente.setEstado(rs.getString("estado"));
				cliente.setCidade(rs.getString("cidade"));
				cliente.setCep(rs.getString("cep"));
				cliente.setEmail(rs.getString("email"));
				cliente.setEstadoCivil(rs.getString("estadoCivil"));

				listaClientes.add(cliente);

			}

			return listaClientes;

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return listaClientes;

	}

	public List<Cliente> consultarClienteCpf(String texto) {

		List<Cliente> listaClientes = new ArrayList<Cliente>();

		try {

			String sql = "select * from clientes where cpf = ? ";
			PreparedStatement stmt = this.connection.prepareStatement(sql);
			stmt.setString(1, texto);
			ResultSet rs = stmt.executeQuery();
			while (rs.next()) {
				Cliente cliente = new Cliente();
				cliente.setNome(rs.getString("nome"));
				cliente.setCpf(rs.getString("cpf"));
				cliente.setTelefoneContato(rs.getString("telefoneContato"));
				cliente.setCelular(rs.getString("celular"));
				cliente.setEndereco(rs.getString("endereco"));
				cliente.setBairro(rs.getString("bairro"));
				cliente.setEstado(rs.getString("estado"));
				cliente.setCidade(rs.getString("cidade"));
				cliente.setCep(rs.getString("cep"));
				cliente.setEmail(rs.getString("email"));
				cliente.setEstadoCivil(rs.getString("estadoCivil"));
				cliente.setCodigoCliente(rs.getInt("codigoCliente"));
				
				listaClientes.add(cliente);

			}

			return listaClientes;

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return listaClientes;

	}
	
	
	public void excluirCliente(int codigo){
		
		try{
			String sql = "delete from clientes where codigoCliente = ? ";
			PreparedStatement stmt = this.connection.prepareStatement(sql);
			stmt.setInt(1, codigo);
			stmt.execute();
		}catch (SQLException e) {
			e.printStackTrace();
		}
	}

    public Cliente buscaClienteCodigo(int codigo){
		
		String sql = "select * from clientes where codigoCliente = ? ";
		Cliente cliente = new Cliente();
		
		try {
			PreparedStatement stmt = (PreparedStatement) this.connection.prepareStatement(sql);
		    stmt.setInt(1,codigo);
		    ResultSet rs = (ResultSet) stmt.executeQuery();
		    rs.next();
		    
		    cliente.setNome(rs.getString("nome"));
			cliente.setCpf(rs.getString("cpf"));
			cliente.setTelefoneContato(rs.getString("telefoneContato"));
			cliente.setCelular(rs.getString("celular"));
			cliente.setEndereco(rs.getString("endereco"));
			cliente.setBairro(rs.getString("bairro"));
			cliente.setEstado(rs.getString("estado"));
			cliente.setCidade(rs.getString("cidade"));
			cliente.setCep(rs.getString("cep"));
			cliente.setEmail(rs.getString("email"));
			cliente.setEstadoCivil(rs.getString("estadoCivil"));
			cliente.setCodigoCliente(rs.getInt("codigoCliente"));
		    
		    
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return cliente;
		
	}

    public void alteraDadosCliente(Cliente cliente){
    	
      try{
    	String sql = " update clientes set nome = ? ," +
    	                                   "cpf = ? ," +
    	                                   "telefoneContato = ? ," +
    	                                   "celular = ? ,"+
    	                                   "endereco = ? ,"+
    	                                   "bairro = ? ,"+
    	                                   "estado = ? ,"+
    	                                   "cidade = ? ,"+
    	                                   "cep = ? ,"+
    	                                   "email = ? ,"+
    	                                   "estadoCivil = ?" +
    	             "where codigoCliente = ?";
    	
    	PreparedStatement stmt = this.connection.prepareStatement(sql);
    	stmt.setString(1, cliente.getNome());
		stmt.setString(2, cliente.getCpf());
		stmt.setString(3, cliente.getTelefoneContato());
		stmt.setString(4, cliente.getCelular());
		stmt.setString(5, cliente.getEndereco());
		stmt.setString(6, cliente.getBairro());
		stmt.setString(7, cliente.getEstado());
		stmt.setString(8, cliente.getCidade());
		stmt.setString(9, cliente.getCep());
		stmt.setString(10, cliente.getEmail());
		stmt.setString(11, cliente.getEstadoCivil());
        stmt.setInt(12, cliente.getCodigoCliente());
        stmt.executeUpdate();

	} catch (SQLException e) {
		e.printStackTrace();

	}
    	
    }

}
